package main

import "fmt"

func main() {

	/*切片是一种动态数组，比数组操作灵活，长度不是固定的，可以进行追加和删除。

	len() 和 cap() 返回结果可相同和不同。*/
	// 方式一
	a := make([]int, 5) // 初始化长度为5的slice,默认值为零
	for i := 10; i < 15; i++ {
		a = append(a, i)
	}
	a = append(a, 6)
	fmt.Println(a)

	//方式二
	var b []int
	for i := 100; i < 105; i++ {
		b = append(b, i)
	}

	fmt.Println(b)

	fmt.Println(`截取切片---------------------------------`)

	/*	sli := [] int {1, 2, 3, 4, 5, 6}
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)

		fmt.Println("sli[1] ==", sli[1])
		fmt.Println("sli[:] ==", sli[:])
		fmt.Println("sli[1:] ==", sli[1:])
		fmt.Println("sli[:4] ==", sli[:4])

		fmt.Println("sli[0:3] ==", sli[0:3])
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli[0:3]),cap(sli[0:3]),sli[0:3])

		fmt.Println("sli[0:3:4] ==", sli[0:3:4])
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli[0:3:4]),cap(sli[0:3:4]),sli[0:3:4])*/

	fmt.Println(`追加切片---------------------------------`)
	/*
		sli := [] int {4, 5, 6}
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)

		sli = append(sli, 7)
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)

		sli = append(sli, 8)
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)

		sli = append(sli, 9)
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)

		sli = append(sli, 10)
		fmt.Printf("len=%d cap=%d slice=%v\n",len(sli),cap(sli),sli)*/

	//append 时，容量不够需要扩容时，cap 会翻倍。

	fmt.Println(`删除切片---------------------------------`)
	sli := []int{1, 2, 3, 4, 5, 6, 7, 8}
	fmt.Printf("len=%d cap=%d slice=%v\n", len(sli), cap(sli), sli)

	//删除尾部 2 个元素
	fmt.Printf("len=%d cap=%d slice=%v\n", len(sli[:len(sli)-2]), cap(sli[:len(sli)-2]), sli[:len(sli)-2])

	//删除开头 2 个元素
	fmt.Printf("len=%d cap=%d slice=%v\n", len(sli[2:]), cap(sli[2:]), sli[2:])

	//删除中间 2 个元素
	sli = append(sli[:3], sli[3+2:]...)
	fmt.Printf("len=%d cap=%d slice=%v\n", len(sli), cap(sli), sli)

	fmt.Printf("len=%d cap=%d slice=%v\n", len(sli), cap(sli), sli)

}
